package com.sky.es.service;

import com.sky.es.entity.ProductDoc;

import java.util.List;

/**
 * @author yangsk
 * es的boo查询
 */
public interface ProductBoolQueryEsService {
    /**
     * must结合term查询
     * @param price
     * @return
     */
    List<ProductDoc> getMustByPrice(Long price);

    /**
     * must结合match、term查询
     * @return
     */
    List<ProductDoc> getBollQueryTwo();

    /**
     * must结合shoud查询
     * @return
     */
    List<ProductDoc> getBollQueryThree();

    /**
     * 条件1：name中不包含phone
     * 条件2：
     *        { name中包含phone,且价格大于2000 } ===》a
     *  或者  {type是手机且(品牌是华为或者小米)}     ===》b
     *==========================================
     * 分析：
     * 条件1和条件2的关系为or
     * 条件一可以用 must not
     * 条件二中,又包含两个小条件，这里暂且命名为：a、b;
     * 在b中又分分为两个条件，条件a和b是或的关系，用should
     *  "query":{
     *      "bool":{
     *          "mast_not":[
     *              {
     *                 "match":{"name":"小米"}
     *              }
     *          ],
     *          "should":[
     *              "bool":{
     *                  "mast":[
     *                      "match":{"name","米"},
     *                      "range":{"price":{"gte":2000}}
     *                  ]
     *              },
     *              "bool":{
     *                  "mast":[
     *                      "term":{"type.keyword":"phone"},
     *                      "terms":{
     *                          "lv.keyword":[
     *                              "旗舰机"，“高端机”
     *                          ]
     *                      }
     *                  ]
     *              }
     *          ]
     *  }
     *
     * @return
     */
    List<ProductDoc> getBollQueryFour();
}
